package com.yanggu.scala.chapater13.abstractcontrol

//抽象控制
object AbstractControlDemo01 {

  def main(args: Array[String]): Unit = {
    //控制抽象是这样的函数，满足如下条件
    //参数是函数
    //函数参数没有输入值也没有返回值

    def myRunInThread(f1: () => Unit) = {
      new Thread {
        override def run(): Unit = {
          f1()
        }
      }.start()
    }

    //调用myRunInThread方法, 传入一个匿名函数
    myRunInThread(
      () => {
        println("干活咯！5秒完成...")
        Thread.sleep(5000)
        println("干完咯！")
      }
    )

    //调用方式可以简写
    myRunInThread {
      () =>
        println("干活咯！5秒完成...")
        Thread.sleep(5000)
        println("干完咯！")
    }

    //简化处理，省略()，如下形式
    def myRunThread2(f1: => Unit) = {
      new Thread {
        override def run(): Unit =
          f1
      }.start()
    }

    myRunThread2 {
      println("myRunThread2干活咯！5秒完成...")
      Thread.sleep(5000)
      println("myRunThread2干完咯！")
    }
  }

}
